Tutorial 4: Start from Scratch - Part 2 

In this next tutorial, you will add Position, Size, and Shape operators to the particle system you created in the last tutorial. You'll also explore the thinkingParticles user interface a bit more and start learning how to move operators around, show data streams and learn how to determine what kinds of information a data stream accepts.

In the previous tutorial you created some particles and gave them basic upward motion. Now you will add Size and Shape operators (as you did in the Quick Start lessons) as well as a Position operator so you can place the particles and have them emit from somewhere other then 0,0,0.

 

Now that you have the Particle group, you can add Position, Size, and Shape operators to this DynamicSet.

 

image22_1.jpg


As you can see, both the Size and the Position operators are created with their Particle inputs yellow. Also note that the entire Pos_Size_Shape DynamicSet is now Invalid. You'll correct this in the next steps.

It is important to note that in the previous steps you made a connection from an input to an output data stream, then from an output to an input data stream. thinkingParticles is not particular when it comes to how you connect up the various operators within the Wire Setup View.

image23_1.jpg

Position and Size operators connected to the Particles group


You can see that the particles have moved up 50 units, but the motion is not correct. This is because the position is now overwriting the motion. The Position operator is telling thinkingParticles to set the particles’ position to 0,0,50 always. This means that if the particles try to move, they get set right back to this position.

How do we know this is the case? By examining the DynamicSet Tree View.



image111.gif



Remember that the rules and operators are processed in order from top to bottom inside of each DynamicSet. Since the Position operator is at the bottom of the list inside of the Pos_Size_Shape DynamicSet (as shown above), it gets processed last, and as a result, overrides the motion data created above it in the Motion DynamicSet.

There are a few ways to correct this behavior.

By connecting the Particles group to the Particle Age Condition, you've now instructed the Particle Age Condition to evaluate the particles' ages in the Particles group. When this new condition now looks at a particle's age, it will determine if the particle has reached a certain specified age (set in the operator itself). If it is, it will result in a True condition being generated by the Particle Age node. If a particle is not the age specified by the Particle Age node, a False condition will be generated. These outputs are called Boolean results, and they can act as on/off switches for other operators to be triggered by.

However, we don't yet know what to do with that information and how to tie it into the existing system. There doesn't appear to be another input data stream on the Position operator. But actually, there are several more. They are just hidden. You now need to unhide one of them.

 
 
 

image1_3.gif

   
 

image2_2.gif



All visible input data streams will be shown with a check mark next to their names, while invisible ones will have none.

The arrow next to an input data stream indicates that it is connected to another operator - in this case, the Particle input is connected


 

When done, you'll now see an additional input data stream for the Position operator.


image3_2.gif

Now, the ON input data stream basically tells an operator when to be active or "on", and it can be driven by other rules and conditions like the Particle Age Condition. But what kind of inputs does ON take? A good way to find out it to hover your cursor over the input data stream.

 

image


You'll see (as shown above) that it says ON, then in parentheses (Bool). This is a Boolean input data stream type, and will take other boolean outputs, like the one generated by a Particle Age Condition. In this case, the Particle Age condition will turn the Position operator on or off depending on the age of the particle. Let's connect it and see what happens.

 

image24_1.jpg

Particle Age Condition connected to the Position operator 

Now that the Position is only assigned at birth (as you can check by selecting the Particle Age Condition and viewing it's rollout parameters), the particles behave the way you want them to. Let’s try another way of getting this same result.

 

image25_1.jpg

Removing the Particle Age Condition

 

image26_1.jpg

Cutting the Position operator


 
 
 

image27_1.jpg

Position operator connected to the Born operator

You can see that this give you the same result as using the Particle Age condition because it only assigns the position upon the particles’ creation.

 
 
image112.gif

Perspective viewport render